package org.biubiu0002.baiblog.core.controller;

import com.google.common.base.Preconditions;
import org.apache.commons.lang3.StringUtils;
import org.biubiu0002.baiblog.common.constants.Constants;
import org.biubiu0002.baiblog.common.utils.PageUtils;
import org.biubiu0002.baiblog.common.utils.R;
import org.biubiu0002.baiblog.core.annotations.PermissionIgnore;
import org.biubiu0002.baiblog.core.model.vo.UserInfoVo;
import org.biubiu0002.baiblog.core.model.vo.req.UpdateUserStatusReqVo;
import org.biubiu0002.baiblog.core.model.vo.req.UserUpdateReqVo;
import org.biubiu0002.baiblog.core.model.vo.res.LoginResVo;
import org.biubiu0002.baiblog.core.service.SysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;



/**
 * 用户表
 *
 * @author biubiu0002
 * @email 1007918011@qq.com
 * @date 2022-05-06 00:50:37
 */
@RestController
@RequestMapping("/sysuser")
public class SysUserController {
    @Autowired
    private SysUserService sysUserService;

    /**
     * 列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params){
        PageUtils page = sysUserService.queryPage(params);

        return R.ok().put("page", page);
    }

    /**
     * 查看用户信息
     * @param userUid 用户uid
     * @return 用户个人信息
     */
    @GetMapping("/info")
    @PermissionIgnore
    public R userInfo(@RequestParam String userUid){
        Preconditions.checkArgument(StringUtils.isNotBlank(userUid),"用户uid不能为空");
        UserInfoVo userInfoVo = sysUserService.getUserInfoByUserUid(userUid);
        return R.ok().put("data",userInfoVo);
    }

    /**
     * 更新用户信息
     * @param userUpdateReqVo 更新vo
     * @return 登录vo
     */
    @PutMapping("/update")
    public R update(@RequestBody UserUpdateReqVo userUpdateReqVo){
        if(StringUtils.isNotBlank(userUpdateReqVo.getEmail())){
            Preconditions.checkArgument(userUpdateReqVo.getEmail().matches(Constants.EMAIL_REGEX),
                    "输入邮箱格式有误");
        }
        if(StringUtils.isNotBlank(userUpdateReqVo.getPhone())){
            Preconditions.checkArgument(userUpdateReqVo.getPhone().matches(Constants.PHONE_REGEX),
                    "输入手机号格式有误");
        }
        LoginResVo updateResVo = sysUserService.updateUser(userUpdateReqVo);
        return R.ok().put("data",updateResVo);
    }

    /**
     * 更新用户状态
     * @param updateUserStatusReqVo 更新用户状态vo
     * @return 登录vo
     */
    @PutMapping("/update/status")
    public R updateUserStatus(@RequestBody UpdateUserStatusReqVo updateUserStatusReqVo){
        Preconditions.checkArgument(StringUtils.isNotBlank(updateUserStatusReqVo.getUserUid()),"用户uid不能为空");
        Preconditions.checkArgument(updateUserStatusReqVo.getStatus()!=null,"用户状态不能为空");
        sysUserService.updateUserStatus(updateUserStatusReqVo);
        return R.ok();

    }

    @PutMapping("/{userId}")
    public R relationUserRole(@PathVariable("userId") String userId){

        return R.ok();
    }
}
